{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 获取大模型\n",
    "PS：调用其他单元格 **需先执行当前单元格代码**，将 **llm实例** 加载到内存（**重启或跨notebook失效**）"
   ],
   "id": "eb4c2aefb778ce7c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:50:15.189632Z",
     "start_time": "2025-10-16T15:50:14.211540Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#导入 dotenv 库的 load_dotenv 函数，用于加载环境变量文件（.env）中的配置\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "import os\n",
    "\n",
    "dotenv.load_dotenv(override=True)  # override=True重新加载 当前目录下的 .env 文件\n",
    "\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "\n",
    "# 创建大模型实例\n",
    "llm = ChatOpenAI(model=\"deepseek-reasoner\")  # 使用模型"
   ],
   "id": "757a20ce540d4852",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 使用纯Prompt",
   "id": "35e746c493f2d415"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:50:42.980335Z",
     "start_time": "2025-10-16T15:50:15.199634Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#导入 dotenv 库的 load_dotenv 函数，用于加载环境变量文件（.env）中的配置\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "import os\n",
    "\n",
    "dotenv.load_dotenv(override=True)  # override=True重新加载 当前目录下的 .env 文件\n",
    "\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "\n",
    "# 创建大模型实例\n",
    "llm = ChatOpenAI(model=\"deepseek-reasoner\")  # 使用模型\n",
    "\n",
    "# 直接提供问题，并调用llm\n",
    "response = llm.invoke(\"什么是大模型？\")\n",
    "print(response)"
   ],
   "id": "82a5fdbf10eab900",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "content='说得非常直接一点：**大模型是指拥有巨大参数量和复杂结构，能够通过海量数据训练，来完成各种复杂任务的人工智能模型。**\\n\\n您可以把大模型想象成一个“超级大脑”。它不是为某一个特定任务（比如只下围棋或只识别猫狗图片）而设计的，而是通过“阅读”互联网上几乎所有的文本、图像、音频等信息，学习到了一个通用的、底层的“世界知识”。然后，我们可以通过简单的指令（自然语言）让它来帮我们解决各种各样的问题。\\n\\n---\\n\\n### 大模型的核心特征\\n\\n1.  **巨大参数量**：\\n    *   “参数”是模型内部学到的知识和规律。参数量越大，模型能存储和理解的复杂模式就越多。\\n    *   早期模型的参数可能是几百万或几亿个，而当今的大模型参数动辄**千亿（百亿参数称为B，千亿参数称为100B+）甚至万亿级别**。例如，GPT-3有1750亿参数，GPT-4的参数量据传闻更大。\\n\\n2.  **基于Transformer架构**：\\n    *   这是大模型得以成功的关键技术基石。Transformer架构能非常高效地处理序列数据（如句子），并捕捉长距离的依赖关系，使得模型能够更好地理解上下文和语义。\\n\\n3.  **预训练 + 微调/提示** 范式：\\n    *   **预训练**：这是最耗时耗力的阶段。模型在超大规模的无标注数据集（如整个互联网的文本）上进行“自监督学习”，目标是学会预测下一个词或填补空白。这个过程让模型学到了语法、事实、逻辑推理等通用知识。可以理解为“通识教育”阶段。\\n    *   **微调/提示**：预训练后的“通才”模型，可以通过两种方式变为“专才”：\\n        *   **微调**：用特定领域的小规模数据对模型参数进行进一步训练，使其特别擅长某个任务（如法律文书生成、医疗问答）。\\n        *   **提示**：更常用的方式。用户直接通过自然语言给模型下达指令（即“提示”），模型就能基于预训练学到的知识完成任务。比如直接问：“请把下面这段文字翻译成法语。”\\n\\n4.  **涌现能力**：\\n    *   当模型的规模（参数、数据、算力）超过某个临界点后，它会表现出一些在小型模型上没有的、令人惊喜的能力。\\n    *   例如：**上下文学习**（仅通过几个例子就能学会一个新任务）、**指令遵循**（能理解并执行复杂指令）、**逐步推理**（能展示出思考过程，即思维链）。\\n\\n---\\n\\n### 大模型的主要类型\\n\\n虽然通常我们说“大模型”主要指语言大模型，但实际上它涵盖多种模态：\\n\\n1.  **大语言模型**：\\n    *   这是最主流和知名的一类，专注于理解和生成文本。\\n    *   **代表模型**：OpenAI的 **GPT系列**、Google的 **PaLM/Gemini**、Anthropic的 **Claude**、Meta的 **Llama**、中国的 **文心一言（Ernie）**、**通义千问**、**智谱GLM**等。\\n    *   **应用**：智能对话、内容创作、翻译、代码编写、信息摘要等。\\n\\n2.  **多模态大模型**：\\n    *   能够同时理解和处理多种类型的信息，如文本、图像、音频、视频等。\\n    *   **代表模型**：OpenAI的 **GPT-4V**（可以看懂图片）、Google的 **Gemini**（原生多模态）、OpenAI的 **Sora**（文生视频）。\\n    *   **应用**：根据文字描述生成图片、分析图片内容并回答问题、生成带语音的视频等。\\n\\n3.  **科学计算大模型**：\\n    *   专门用于解决科学领域的问题，如预测蛋白质结构（AlphaFold）、天气预测、新材料发现等。\\n\\n---\\n\\n### 为什么大模型如此重要？\\n\\n*   **技术突破**：它代表了AI在“理解”和“生成”人类自然语言方面的巨大飞跃，是通向通用人工智能的重要一步。\\n*   **应用广泛**：几乎可以赋能所有行业，提升生产效率，成为新的生产力工具。\\n*   **人机交互革命**：使用自然语言与机器交互，极大地降低了技术使用门槛。\\n\\n### 挑战与局限\\n\\n*   **“幻觉”问题**：模型可能会自信地生成错误或虚构的信息。\\n*   **偏见与安全**：训练数据中的偏见可能会被模型放大。\\n*   **高成本**：训练和部署大模型需要巨大的算力和资金投入。\\n*   **知识滞后**：模型的知识依赖于训练数据，无法实时更新。\\n\\n**总结来说，大模型是当前人工智能领域的核心驱动力，它是一个通过海量数据和算力训练出的、具备强大泛化能力的通用基础模型，正深刻地改变着我们与信息世界交互的方式。**' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 1032, 'prompt_tokens': 9, 'total_tokens': 1041, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 0, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_name': 'deepseek-v3-1-terminus', 'system_fingerprint': None, 'id': '021760629815833076ea4837f74e966daea642e85370365698376', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='run--9721961d-014a-4a12-a59e-26b4a9134f82-0' usage_metadata={'input_tokens': 9, 'output_tokens': 1032, 'total_tokens': 1041, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 0}}\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 使用提示词模板",
   "id": "bc9f3508e35f78f4"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:51:02.629214Z",
     "start_time": "2025-10-16T15:50:43.138398Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "\n",
    "# 需要注意的一点是，这里需要指明具体的role，在这里是system和用户\n",
    "prompt = ChatPromptTemplate.from_messages([\n",
    "    (\"system\", \"你是世界级的技术文档编写者\"),\n",
    "    (\"user\", \"{input}\")  # {input}为变量\n",
    "])\n",
    "# 我们可以把prompt和具体llm的调用和在一起。\n",
    "chain = prompt | llm\n",
    "message = chain.invoke({\"input\": \"大模型中的LangChain是什么?\"})\n",
    "print(message)"
   ],
   "id": "93b5d3171870cd98",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "content='LangChain 是一个用于构建大语言模型（LLM）驱动应用程序的开源框架，它通过模块化的方式简化了 LLM 应用的开发流程。以下是 LangChain 的核心概念和功能：\\n\\n---\\n\\n### **1. 核心目标**\\nLangChain 主要解决 LLM 应用的常见挑战：\\n- **上下文管理**：突破 LLM 的固定上下文长度限制。\\n- **外部数据集成**：让 LLM 能够访问私有或实时数据（如数据库、API）。\\n- **任务流程化**：将复杂任务拆解为多步骤链式调用。\\n- **可控性与可解释性**：跟踪 LLM 的决策过程，便于调试优化。\\n\\n---\\n\\n### **2. 关键组件**\\n#### **(1) 模型（Models）**\\n- 支持多种 LLM 接口（如 OpenAI、Hugging Face、本地模型）。\\n- 统一调用方式，方便切换不同模型。\\n\\n#### **(2) 提示模板（Prompts）**\\n- 动态生成高质量的提示词（Prompt），支持变量注入和示例管理。\\n- 例如：根据用户输入自动填充模板中的占位符。\\n\\n#### **(3) 链（Chains）**\\n- 将多个 LLM 调用或操作组合成工作流。\\n- 示例场景：  \\n  `用户提问 → 检索相关文档 → 生成摘要 → 回答问题`。\\n\\n#### **(4) 数据检索（Retrieval）**\\n- 集成外部数据源（如文档、数据库、网络搜索）。\\n- 常用工具：  \\n  - **向量数据库**（如 Chroma、Pinecone）：存储文本嵌入，实现语义搜索。  \\n  - **文档加载器**：支持 PDF、网页、CSV 等格式。\\n\\n#### **(5) 代理（Agents）**\\n- 让 LLM 自主选择工具（如计算器、API、搜索引擎）完成任务。  \\n- 例如：  \\n  `\"查询纽约天气后计算旅行预算\" → LLM 自动调用天气 API 和计算工具`。\\n\\n#### **(6) 记忆（Memory）**\\n- 管理对话历史，实现多轮对话的上下文持久化。  \\n- 支持短期记忆（单次会话）和长期记忆（数据库存储）。\\n\\n---\\n\\n### **3. 典型应用场景**\\n1. **智能问答系统**  \\n   - 结合企业内部文档，提供精准答案。\\n2. **自动化流程**  \\n   - 自动生成报告、分析数据、调用 API。\\n3. **对话机器人**  \\n   - 支持复杂任务（如订餐、客服、编程助手）。\\n4. **内容生成**  \\n   - 基于模板生成营销文案、代码、邮件等。\\n\\n---\\n\\n### **4. 优势与挑战**\\n#### **优势**\\n- **模块化设计**：灵活组合组件，快速原型开发。\\n- **生态丰富**：集成大量工具和数据源。\\n- **降低门槛**：无需深入理解 LLM 底层细节。\\n\\n#### **挑战**\\n- 依赖提示词质量，需反复调试优化。\\n- 复杂链可能导致延迟或错误累积。\\n\\n---\\n\\n### **5. 学习资源**\\n- 官方文档：https://python.langchain.com/\\n- GitHub 仓库：https://github.com/langchain-ai/langchain\\n- 实践教程：通过构建「文档问答机器人」入门。\\n\\n---\\n\\n总结来说，LangChain 是大模型应用开发的“脚手架”，通过标准化流程解决了 LLM 的集成与扩展问题，成为当前 AI 应用开发的重要工具之一。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 732, 'prompt_tokens': 19, 'total_tokens': 751, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 0, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_name': 'deepseek-v3-1-terminus', 'system_fingerprint': None, 'id': '021760629845532ed26b5ffb2e2be2f4c8ea53ea2d75bcdc87e05', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='run--ee55e2cc-c8bb-45aa-9d29-a4066a152e76-0' usage_metadata={'input_tokens': 19, 'output_tokens': 732, 'total_tokens': 751, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 0}}\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 使用输出解析器",
   "id": "4312ad7bed6eda27"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:51:09.527270Z",
     "start_time": "2025-10-16T15:51:02.676652Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "from langchain_core.output_parsers import StrOutputParser, JsonOutputParser\n",
    "\n",
    "# 初始化模型\n",
    "llm = ChatOpenAI(model=\"gpt-4o-mini\")\n",
    "# 创建提示模板\n",
    "prompt = ChatPromptTemplate.from_messages([\n",
    "    (\"system\", \"你是世界级的技术文档编写者。\"),\n",
    "    (\"user\", \"{input}\")\n",
    "])\n",
    "# 使用输出解析器\n",
    "# output_parser = StrOutputParser()\n",
    "output_parser = JsonOutputParser()\n",
    "# 将其添加到上一个链中\n",
    "# 3.chain = prompt | llm\n",
    "chain = prompt | llm | output_parser\n",
    "# 调用它并提出同样的问题。答案是一个字符串，而不是ChatMessage\n",
    "# 3.chain.invoke({\"input\": \"LangChain是什么?\"})\n",
    "chain.invoke({\"input\": \"LangChain是什么? 用JSON格式回复，问题用question，回答用answer\"})"
   ],
   "id": "a198f5aca28f1a68",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'question': 'LangChain是什么?',\n",
       " 'answer': 'LangChain是一个开源框架，用于构建基于语言模型的应用程序。它提供了一系列工具和组件，帮助开发者在自然语言处理（NLP）任务中更便捷地使用语言模型。LangChain主要支持大规模语言模型的调用，并集成了多种数据源和API，使得构建复杂的对话系统、文本生成和问答系统等应用变得更加简单与高效。'}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 使用向量存储",
   "id": "75c5fbd7766ee1ff"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:51:20.723775Z",
     "start_time": "2025-10-16T15:51:09.543496Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入和使用 WebBaseLoader\n",
    "from langchain_community.document_loaders import WebBaseLoader\n",
    "import bs4\n",
    "\n",
    "loader = WebBaseLoader(\n",
    "    web_path=\"http://gongbao.court.gov.cn/Details/dfe439fb9450f0525bd7e7b50a6242.html\",\n",
    "    bs_kwargs=dict(\n",
    "        parse_only=bs4.SoupStrainer(\n",
    "            id=[\"gb_content\"]\n",
    "        )\n",
    "    )\n",
    ")\n",
    "docs = loader.load()\n",
    "# print(docs)\n",
    "\n",
    "# 对于嵌入模型，这里通过 API调用\n",
    "from langchain_openai import OpenAIEmbeddings\n",
    "\n",
    "embeddings = OpenAIEmbeddings(model=\"text-embedding-ada-002\")\n",
    "from langchain_community.vectorstores import FAISS\n",
    "from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
    "\n",
    "# 使用分割器分割文档\n",
    "text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)\n",
    "documents = text_splitter.split_documents(docs)\n",
    "print(len(documents))\n",
    "# 向量存储 embeddings 会将 documents 中的每个文本片段转换为向量，并将这些向量存储在 FAISS向量数据库中\n",
    "vector = FAISS.from_documents(documents, embeddings)"
   ],
   "id": "f710f0bfa5c99d41",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "USER_AGENT environment variable not set, consider setting it to identify your requests.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "92\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# RAG（检索增强生成）\n",
    "基于外部知识，增强大模型回复"
   ],
   "id": "7f314aa54fb95693"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:51:24.938415Z",
     "start_time": "2025-10-16T15:51:20.740714Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_core.prompts import PromptTemplate\n",
    "\n",
    "retriever = vector.as_retriever()\n",
    "retriever.search_kwargs = {\"k\": 3}\n",
    "docs = retriever.invoke(\"建设用地使用权是什么？\")\n",
    "# for i,doc in enumerate(docs):\n",
    "# print(f\"⭐第{i+1}条规定：\")\n",
    "# print(doc)\n",
    "# 6.定义提示词模版\n",
    "prompt_template = \"\"\"\n",
    "你是一个问答机器人。\n",
    "你的任务是根据下述给定的已知信息回答用户问题。\n",
    "确保你的回复完全依据下述已知信息。不要编造答案。\n",
    "如果下述已知信息不足以回答用户的问题，请直接回复\"我无法回答您的问题\"。\n",
    "已知信息:\n",
    "{info}\n",
    "用户问：\n",
    "{question}\n",
    "请用中文回答用户问题。\n",
    "\"\"\"\n",
    "# 7.得到提示词模版对象\n",
    "template = PromptTemplate.from_template(prompt_template)\n",
    "# 8.得到提示词对象\n",
    "prompt = template.format(info=docs, question='建设用地使用权是什么？')\n",
    "## 9. 调用LLM\n",
    "response = llm.invoke(prompt)\n",
    "print(response.content)"
   ],
   "id": "77332ab47680ae07",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "建设用地使用权是指具有法定基础的单位或个人依法在特定建设用地上进行建设和使用的权利。根据法律规定，建设用地使用权的设立可以采用出让或者划拨的方式，其中工业、商业、旅游、娱乐和商品住宅等经营性用地应采取招标、拍卖等公开竞价的方式出让。建设用地使用权人应当合理利用土地，不得改变土地用途，且在使用权期限届满后，住宅建设用地使用权可自动续期。\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 使用Agent",
   "id": "484e8bf65dbefdb8"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-16T15:51:36.020590Z",
     "start_time": "2025-10-16T15:51:24.955424Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain.tools.retriever import create_retriever_tool\n",
    "\n",
    "# 检索器工具\n",
    "retriever_tool = create_retriever_tool(\n",
    "    retriever,\n",
    "    \"CivilCodeRetriever\",\n",
    "    \"搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题，您必须使用此工具!\"\n",
    ")\n",
    "tools = [retriever_tool]\n",
    "from langchain import hub\n",
    "from langchain.agents import create_openai_functions_agent\n",
    "from langchain.agents import AgentExecutor\n",
    "\n",
    "# https://smith.langchain.com/hub\n",
    "prompt = hub.pull(\"hwchase17/openai-functions-agent\")\n",
    "agent = create_openai_functions_agent(llm, tools, prompt)\n",
    "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n",
    "# 运行代理\n",
    "agent_executor.invoke({\"input\": \"建设用地使用权是什么\"})"
   ],
   "id": "f3ab6d4f7fe01416",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Environment\\Miniconda\\envs\\pyth310\\lib\\site-packages\\langsmith\\client.py:272: LangSmithMissingAPIKeyWarning: API key must be provided when using hosted LangSmith API\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m\n",
      "Invoking: `CivilCodeRetriever` with `{'query': '建设用地使用权'}`\n",
      "\n",
      "\n",
      "\u001B[0m\u001B[36;1m\u001B[1;3m第三百四十七条　设立建设用地使用权，可以采取出让或者划拨等方式。    工业、商业、旅游、娱乐和商品住宅等经营性用地以及同一土地有两个以上意向用地者的，应当采取招标、拍卖等公开竞价的方式出让。    严格限制以划拨方式设立建设用地使用权。    第三百四十八条　通过招标、拍卖、协议等出让方式设立建设用地使用权的，当事人应当采用书面形式订立建设用地使用权出让合同。    建设用地使用权出让合同一般包括下列条款：    （一）当事人的名称和住所；    （二）土地界址、面积等；    （三）建筑物、构筑物及其附属设施占用的空间；    （四）土地用途、规划条件；    （五）建设用地使用权期限；    （六）出让金等费用及其支付方式；    （七）解决争议的方法。    第三百四十九条　设立建设用地使用权的，应当向登记机构申请建设用地使用权登记。建设用地使用权自登记时设立。登记机构应当向建设用地使用权人发放权属证书。    第三百五十条　建设用地使用权人应当合理利用土地，不得改变土地用途；需要改变土地用途的，应当依法经有关行政主管部门批准。\n",
      "\n",
      "第三百五十一条　建设用地使用权人应当依照法律规定以及合同约定支付出让金等费用。    第三百五十二条　建设用地使用权人建造的建筑物、构筑物及其附属设施的所有权属于建设用地使用权人，但是有相反证据证明的除外。    第三百五十三条　建设用地使用权人有权将建设用地使用权转让、互换、出资、赠与或者抵押，但是法律另有规定的除外。    第三百五十四条　建设用地使用权转让、互换、出资、赠与或者抵押的，当事人应当采用书面形式订立相应的合同。使用期限由当事人约定，但是不得超过建设用地使用权的剩余期限。    第三百五十五条　建设用地使用权转让、互换、出资或者赠与的，应当向登记机构申请变更登记。    第三百五十六条　建设用地使用权转让、互换、出资或者赠与的，附着于该土地上的建筑物、构筑物及其附属设施一并处分。    第三百五十七条　建筑物、构筑物及其附属设施转让、互换、出资或者赠与的，该建筑物、构筑物及其附属设施占用范围内的建设用地使用权一并处分。\n",
      "\n",
      "第三百五十八条　建设用地使用权期限届满前，因公共利益需要提前收回该土地的，应当依据本法第二百四十三条的规定对该土地上的房屋以及其他不动产给予补偿，并退还相应的出让金。    第三百五十九条　住宅建设用地使用权期限届满的，自动续期。续期费用的缴纳或者减免，依照法律、行政法规的规定办理。    非住宅建设用地使用权期限届满后的续期，依照法律规定办理。该土地上的房屋以及其他不动产的归属，有约定的，按照约定；没有约定或者约定不明确的，依照法律、行政法规的规定办理。    第三百六十条　建设用地使用权消灭的，出让人应当及时办理注销登记。登记机构应当收回权属证书。    第三百六十一条　集体所有的土地作为建设用地的，应当依照土地管理的法律规定办理。第十三章　宅基地使用权    第三百六十二条　宅基地使用权人依法对集体所有的土地享有占有和使用的权利，有权依法利用该土地建造住宅及其附属设施。    第三百六十三条　宅基地使用权的取得、行使和转让，适用土地管理的法律和国家有关规定。    第三百六十四条　宅基地因自然灾害等原因灭失的，宅基地使用权消灭。对失去宅基地的村民，应当依法重新分配宅基地。\u001B[0m\u001B[32;1m\u001B[1;3m建设用地使用权是指在一定期限内，依法对某块土地进行开发和利用的权利。根据《中华人民共和国民法典》，设立建设用地使用权的方式可以是出让或划拨，其中工业、商业、旅游、娱乐和商品住宅等经营性用地应通过招标或拍卖的方式公开出让。\n",
      "\n",
      "以下是建设用地使用权的一些关键点：\n",
      "\n",
      "1. **设立方式**：建设用地使用权可以通过出让或划拨的方式设立，出让一般采用招标、拍卖或协议的方式。\n",
      "\n",
      "2. **合同内容**：建设用地使用权出让合同应包括当事人的基本信息、土地位置和面积、土地用途及规划条件、使用权期限、费用及支付方式等。\n",
      "\n",
      "3. **登记**：建设用地使用权需要向登记机构申请登记，登记后权利正式设立，并发放权属证书。\n",
      "\n",
      "4. **用途限制**：建设用地使用权人不得擅自改变土地的用途，需依法申请批准。\n",
      "\n",
      "5. **转让与抵押**：建设用地使用权可以转让、互换、出资、赠与或抵押，但须遵循法律规定并采用书面形式。\n",
      "\n",
      "6. **权利保护**：建设用地使用权人所建造的建筑物及其附属设施的所有权属于使用权人，除非另有证据证明。\n",
      "\n",
      "7. **期限管理**：建设用地使用权期限届满后，居民住宅的使用权可自动续期，而非住宅的使用权需要根据相关法律规定处理。\n",
      "\n",
      "这些条款确保了土地的合理利用和权利的明确，有助于规范土地市场和保护相关权益。\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'input': '建设用地使用权是什么',\n",
       " 'output': '建设用地使用权是指在一定期限内，依法对某块土地进行开发和利用的权利。根据《中华人民共和国民法典》，设立建设用地使用权的方式可以是出让或划拨，其中工业、商业、旅游、娱乐和商品住宅等经营性用地应通过招标或拍卖的方式公开出让。\\n\\n以下是建设用地使用权的一些关键点：\\n\\n1. **设立方式**：建设用地使用权可以通过出让或划拨的方式设立，出让一般采用招标、拍卖或协议的方式。\\n\\n2. **合同内容**：建设用地使用权出让合同应包括当事人的基本信息、土地位置和面积、土地用途及规划条件、使用权期限、费用及支付方式等。\\n\\n3. **登记**：建设用地使用权需要向登记机构申请登记，登记后权利正式设立，并发放权属证书。\\n\\n4. **用途限制**：建设用地使用权人不得擅自改变土地的用途，需依法申请批准。\\n\\n5. **转让与抵押**：建设用地使用权可以转让、互换、出资、赠与或抵押，但须遵循法律规定并采用书面形式。\\n\\n6. **权利保护**：建设用地使用权人所建造的建筑物及其附属设施的所有权属于使用权人，除非另有证据证明。\\n\\n7. **期限管理**：建设用地使用权期限届满后，居民住宅的使用权可自动续期，而非住宅的使用权需要根据相关法律规定处理。\\n\\n这些条款确保了土地的合理利用和权利的明确，有助于规范土地市场和保护相关权益。'}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 7
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
